Building on (Staffell 2017) and (Khan, Jack, and Stephenson 2018), we are interested in GHG emissions from UK electricity generation over time. We are especially interested in how this might change during the UK covid-19 lockdown period (from ).
Several articles by ythe UK ESO and others have already explored this topic:
Fortunately the UK Electricity System Operator publishes half-hourly generation data which includes both power generation (and thus ‘demand’) by fuels and also includes a per-kWh carbon intensity for the electricity produced per half-hour. We use this data to explore the following research questions:
To what extent has electricty demand shown deviation from ‘normal’ demand patterns during the lockdown period?
Has the composition of fuel sources supplying electriicty changed during this period?
Has the lockdown changed greenhouse-gas emissions associated with electriicty generation?
This is ‘grid’ generation from major power stations of various kinds. Data downloaded from https://data.nationalgrideso.com/carbon-intensity1/historic-generation-mix/r/historic_gb_generation_mix and pre-processed.
| DATETIME | year | rDateTimeUTC | GENERATION | CARBON_INTENSITY |
|---|---|---|---|---|
| 2015-01-01 00:00:00 | 2015 | 2015-01-01 00:00:00 | 29823 | 378 |
| 2015-01-01 00:30:00 | 2015 | 2015-01-01 00:30:00 | 30394 | 392 |
| 2015-01-01 01:00:00 | 2015 | 2015-01-01 01:00:00 | 30398 | 394 |
| 2015-01-01 01:30:00 | 2015 | 2015-01-01 01:30:00 | 29252 | 377 |
| 2015-01-01 02:00:00 | 2015 | 2015-01-01 02:00:00 | 28500 | 362 |
| 2015-01-01 02:30:00 | 2015 | 2015-01-01 02:30:00 | 28044 | 352 |
Note that according to the dataset source:
mean MW over the half hour or it may mean MWh per half-hour. It is unclear. The % refers to the fuel mix. Which one could easily calculate from the MW values. But anyway…Table 2.2 shows the mean half hourly generation (MW) and mean carbon intensity over the years covered by the data. It also shows the implied mean half-hourly total kg CO2e per half hour which we have calculated as follows: {#kgcalc} * convert GENERATION (MW) to MWh per half hour by GENERATION/2 (1 MW for half an hour = 1/2 MWh) * convert the result to kWh (* 10000) * multiply by the CARBON_INTENSITY which is in gCO2e/kWh * divide by 1000 to get Kg
Yes, we have *1000 and then /1000 which is 1 but for the sake of clarity we have kept all the steps.
NB: we are unclear how generation via interconnect is included in the original carbon intensity calculation but note that the ESO forecast methodology document states that it is.
| year | Mean halfhourly generation (MW) | Mean half-hourly carbon intensity (gCO2e/kWh) | Mean total half-hourly CO2e (Tonnes) | N months to date | nObs |
|---|---|---|---|---|---|
| 2015 | 34521.86 | 389.81 | 6868.36 | 12 | 17472 |
| 2016 | 34131.29 | 299.37 | 5265.32 | 12 | 17520 |
| 2017 | 33955.43 | 262.87 | 4637.32 | 12 | 17472 |
| 2018 | 33882.71 | 234.84 | 4115.58 | 12 | 17472 |
| 2019 | 33277.45 | 214.14 | 3664.52 | 12 | 17472 |
| 2020 | 32425.74 | 184.78 | 3083.44 | 5 | 7056 |
As we can see mean half-hourly generation has declined over the years but much less spectacularly than the mean carbon intensity which decreased by 30 from 2017 to 2020.
Essentially ‘non-grid’ generation from solar photovoltaic and small scale wind which is ‘embedded’ - i.e. non-grid connected as it is connected ‘downstream’ of the grid exit points. We are not entirely sure if this is accounted for in the grid dataset or not.
We have not yet found a source of this data (if we even need it).
For now embedded generation data is probably not included in the following analysis but we would expect it to depress grid demand when there is greatest insolation (middle of the day, obvs) and wind (largely random in the UK?).
In this section we analyse changes in electricity demand and associated carbon emissions during the UK Covid-19 lockdown via analysis of the generation data.
Several articles and analyses have suggested that demand (and thus generation) patterns have shifted so that weekdays have become more like weekends.
Figure 3.1 uses the openair TheilSen() function (Carslaw and Ropkins 2012) to create a de-seasoned trend plot for mean monthly half-hourly (i.e. the mean of all half-hourly GW values for each month) generation in GW split by weekdays and weekend days. These plots show that there has been a steady decline in generation (and thus demand) over the period. The substantial fall in generation during lockdown in early Spring 2020 is clear but so is a notable drop in generation in late 2015 which was unusually warm and wet.
## [1] "Taking bootstrap samples. Please wait."
## [1] "Taking bootstrap samples. Please wait."
## [1] "Taking bootstrap samples. Please wait."
## [1] "Taking bootstrap samples. Please wait."
## [1] "Taking bootstrap samples. Please wait."
Figure 3.1: Theil-Sen plot of mean half-hourly generation per month since 2015-01-01
| year | Mean CI | N obs |
|---|---|---|
| 2015 | 34521.86 | 17472 |
| 2016 | 34131.29 | 17520 |
| 2017 | 33955.43 | 17472 |
| 2018 | 33882.71 | 17472 |
| 2019 | 33277.45 | 17472 |
| 2020 | 32425.74 | 7056 |
Figure 3.2 shows total half-hourly generation since 2020-02-01. Overall generation has fallen as we would expect given the season (less heating and lighting required) and weekdays are indeed less easy to distinguish from weekends.
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Figure 3.2: Half-hourly generation, UK (recent)
Figure 3.3 shows the daily generation profiles over time for each day of the week. Clearly the shapes are both reducing in magnitude (seasonal and lockdown effects) and also converging in shape.
Figure 3.3: Half-hourly generation, UK (recent)
Figure 3.4 shows the difference between hourly and weekday patterns for lockdown 2020 and the same months in all years from 2018 onwards. It is interesting to note that the twin peak demand periods have been maintained during lockdown but they are considerably lower although we should expect some ‘natural’ reduction due to the overall downward generation trend shown in Figure 3.1. The lower middle monthly plot suggests that while lockdown caused a considerable drop in generation, this difference is now starting to converge on ‘normal’ seasonal demand levels.
## Plot start date: 2018-01-01
## Plot end date: 2020-05-27 23:30:00
## Warning in checkPrep(mydata, vars, type, remove.calm = FALSE): Detected data with Daylight Saving Time, converting to
## UTC/GMT
Figure 3.4: timeVariation plots for half-hourly GW generation comparing pre/lockdown 2020 with the same months in previous years starting in 2018
Figure 3.5 is a similar plot but in this case the generation is normalised within each period to enable clarification of changes in the temporal shape of demand rather than changes in the overall level. As we can see the normalised plots indicate that the relative temporal distribution of generation (demand) is very similar between each period. The shape of demand is therefore relatively unchanged, but it’s level is distinctly lower (Figure 3.4).
## Warning in checkPrep(mydata, vars, type, remove.calm = FALSE): Detected data with Daylight Saving Time, converting to
## UTC/GMT
Figure 3.5: timeVariation plots for normalised half-hourly GW generation comparing pre/lockdown 2020 with the same months in previous years starting in 2018
For this analysis we have shifted the dates for the comparison years to ensure that weekdays and weekends align in each year of data but this does not mean that Easter is the same weekend across the comparison periods nor that Bank Holidays (e.g. VE day 2020) are consistent.
Figure 3.6 shows the most recent mean daily half-hourly GW compared to the same day in previous years. As hinted by Figure 3.4, lockdown clearly reduced demand below the seasonal trend as Figure 3.1 suggested and also levels of demand are now starting to converge on the seasonal trend (c.f. Figure 3.4).
Beware temperature differences - need to control for heating degree days as 2020 was a very warm spring
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Figure 3.6: Comparative daily mean half-hour generation levels 2020 vs 2017-2019
Figure 3.7 shows the percentage difference between the mean half-hourly generation per day in 2020 and the 2017-2019 average for the same day. As we can see January 2020 was already slightly lower than previous years but February appears similar. There appears to be a substantial lockdown effect albiet with some fluctuations and very large dips on VE Day (Friday 8th May) and Thursday 28th May.
Figure 3.7: Percentage difference in mean generation levels 2020 vs 2017-2019
tbc
There are two aspects to this. The first is carbon intensity which is driven by the mix of fuels being used to generate electricity at any given time. The second is the total greenhouse gasses emitted which is, obviously, the intensity * the volume. Given the slight uncertainty over units (see Section 2) we assume this is GENERATION * CARBON_INTENSITY.
Clearly the first of these is driven by the mix of fuels and in the UK this reflects a complex dynamic system of availability of renewables, price, interconnect and demand. To some extent we would expect that lower overall demand should (but not always) increase the share of renewables. However other factors are also at play:
Figure 3.8 agin uses the openair TheilSen() function (Carslaw and Ropkins 2012) to create a de-seasoned trend plot but this time for mean half-hourly carbon intensity by month, weekday and weekend. Again Table 3.2 indicates the years over which the trend is calculated. This plot shows that carbon intensity has fallen by around 40 kg CO2e/MWh per year over the time period.
## [1] "Taking bootstrap samples. Please wait."
## [1] "Taking bootstrap samples. Please wait."
## [1] "Taking bootstrap samples. Please wait."
## [1] "Taking bootstrap samples. Please wait."
## [1] "Taking bootstrap samples. Please wait."
Figure 3.8: Theil-Sen plot of mean half-hourly carbon intensity per month since 2015-01-01
| year | Mean CI | N obs |
|---|---|---|
| 2015 | 389.8107 | 17472 |
| 2016 | 299.3657 | 17520 |
| 2017 | 262.8656 | 17472 |
| 2018 | 234.8407 | 17472 |
| 2019 | 214.1422 | 17472 |
| 2020 | 184.7788 | 7056 |
Figure 3.9 shows half-hourly carbon intensity since 2020-02-01. Overall generation has fallen as we would expect given the season (less heating and lighting required) and weekdays are indeed less easy to distinguish from weekends.
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Figure 3.9: Half-hourly CO2e emissions, UK (recent)
Figure 3.10 shows the daily carbon intensity profiles over time for each day of the week.
Figure 3.10: Half-hourly generation, UK (recent)
Figure 3.11 shows the difference between hourly and weekday patterns for lockdown 2020 and the previous year(s) starting from January 2018. This plot is not particularly informative since we now CI is already lower in 2020 than previous years and we would expect it to fall during the spring as solar generation increases its contributon. The lockdown phases will also be affected by small numbers of highly windy days.
## Plot start date: 2018-01-01
## Plot end date: 2020-05-27 23:30:00
## Warning in checkPrep(mydata, vars, type, remove.calm = FALSE): Detected data with Daylight Saving Time, converting to
## UTC/GMT
Figure 3.11: timeVariation plots for half-hourly carbon intensity comparing lockdown 2020 with pre-lockdown starting in 2018
Figure 3.12 shows the mean half-hourly carbon intensity per day in 2020 and the 2017-2019 average for the same day. As we would expect given Figure 3.8, 2020 was already considerably lower than the average of previous years but this is not necessarily sustained through lockdown although the affects of weather on solar and wind availability need to be taken in to account.
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Figure 3.12: Percentage difference in mean carbon intensity levels 2020 vs 2017-2019
Figure 3.13 shows the percentage difference between the mean half-hourly carbon intensity per day in 2020 and the 2017-2019 average for the same day. As expected, 2020 was already considerably lower than the average of previous years but this is not necessarily sustained through lockdown although the affects of weather on solar and wind availability need to be taken in to account.
Figure 3.13: Percentage difference in mean carbon intensity levels 2020 vs 2017-2019
tbc
In this section we use our calculation of total CO2e emitted per half hour (see Section 2.1) to analyse the changes in total CO2e emitted which is, after all, what we are mostly interested in from a climate change point of view. Remember that this value is driven both by total generation (demand) and carbon intensity. As we saw above, these are not always tightly correlated.
Figure 3.8 agin uses the openair TheilSen() function (Carslaw and Ropkins 2012) to create a de-seasoned trend plot but this time for mean half-hourly carbon intensity by month, weekday and weekend. Again Table 3.2 indicates the years over which the trend is calculated. This plot shows that carbon intensity has fallen by around 40 kg CO2e/MWh per year over the time period.
## [1] "Taking bootstrap samples. Please wait."
## [1] "Taking bootstrap samples. Please wait."
## [1] "Taking bootstrap samples. Please wait."
## [1] "Taking bootstrap samples. Please wait."
## [1] "Taking bootstrap samples. Please wait."
Figure 3.14: Theil-Sen plot of mean half-hourly kg CO2e emissions per month since 2015-01-01
| year | C02e | N obs |
|---|---|---|
| 2015 | 6868.36 | 17472 |
| 2016 | 5265.32 | 17520 |
| 2017 | 4637.32 | 17472 |
| 2018 | 4115.58 | 17472 |
| 2019 | 3664.52 | 17472 |
| 2020 | 3083.44 | 7056 |
Figure 3.15 shows total half-hourly CO2e emissions since 2020-02-01. Overall generation has fallen as we would expect given the season (less heating and lighting required) and weekdays are indeed less easy to distinguish from weekends.
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Figure 3.15: Half-hourly total CO2e emissions, UK (recent)
Figure 3.16 shows the daily CO2e emissions profiles over time for each day of the week since 2020-02-01.
Figure 3.16: Half-hourly CO2e emissions, UK (recent)
Figure 3.17 shows the difference between hourly and weekday patterns for lockdown 2020 and the previous year(s) starting from January 2018. Again, due to the downward trends we have already identified, we would expect total CO2e emissions to be lower during 2020 and also to fall during the spring as solar generation increases its contributon.
## Plot start date: 2018-01-01
## Plot end date: 2020-05-27 23:30:00
## Warning in checkPrep(mydata, vars, type, remove.calm = FALSE): Detected data with Daylight Saving Time, converting to
## UTC/GMT
Figure 3.17: timeVariation plots for half-hourly CO2e comparing lockdown 2020 with pre-lockdown starting in 2018
Figure 3.18 shows the mean half-hourly carbon intensity per day in 2020 and the 2017-2019 average for the same day. As expected, 2020 was already considerably lower than the average of previous years but this is not necessarily sustained through lockdown although the affects of weather on solar and wind availability need to be taken in to account.
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Figure 3.18: Percentage difference in mean carbon intensity levels 2020 vs 2017-2019
Figure 3.19 shows the percentage difference between the mean half-hourly carbon intensity per day in 2020 and the 2017-2019 average for the same day. As expected, 2020 was already considerably lower than the average of previous years but this is not necessarily sustained through lockdown although the affects of weather on solar and wind availability need to be taken in to account.
Figure 3.19: Percentage difference in mean carbon intensity levels 2020 vs 2017-2019
tbc
If you wish to use any of the material from this report please cite as:
This work is (c) 2020 the authors. Usage rights are specified in the License section (5.4).
All code used to create this report is available from:
This work is made available under the Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) License.
This means you are free to:
Under the following terms:
Notices:
For the avoidance of doubt and explanation of terms please refer to the full license notice and legal code.
You may not be reading the most recent version of this report. Please check:
We do not ‘support’ the code but if you notice a problem please check the issues on our repo and if it doesn’t already exist, please open a new one. * this report’s edit history
This work was supported by:
| Name | gridGenDT |
| Number of rows | 94464 |
| Number of columns | 46 |
| _______________________ | |
| Column type frequency: | |
| character | 3 |
| Date | 1 |
| difftime | 1 |
| factor | 1 |
| numeric | 38 |
| POSIXct | 2 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| DATETIME | 0 | 1 | 19 | 19 | 0 | 94464 | 0 |
| rDateTime | 0 | 1 | 20 | 20 | 0 | 94464 | 0 |
| lockdown | 0 | 1 | 11 | 23 | 0 | 4 | 0 |
Variable type: Date
| skim_variable | n_missing | complete_rate | min | max | median | n_unique |
|---|---|---|---|---|---|---|
| obsDate | 0 | 1 | 2015-01-01 | 2020-05-27 | 2017-09-13 | 1968 |
Variable type: difftime
| skim_variable | n_missing | complete_rate | min | max | median | n_unique |
|---|---|---|---|---|---|---|
| hms | 0 | 1 | 0 secs | 84600 secs | 42300 secs | 48 |
Variable type: factor
| skim_variable | n_missing | complete_rate | ordered | n_unique | top_counts |
|---|---|---|---|---|---|
| peakPeriod | 0 | 1 | FALSE | 5 | Day: 29520, Ear: 27552, Eve: 15744, Lat: 15744 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| GAS | 0 | 1 | 1.256837e+04 | 5.259490e+03 | 1840.00 | 8.464000e+03 | 1.226700e+04 | 1.645125e+04 | 2.747200e+04 | ▅▇▇▅▁ |
| COAL | 0 | 1 | 3.116290e+03 | 3.707860e+03 | 0.00 | 3.790000e+02 | 1.478000e+03 | 4.904000e+03 | 1.775800e+04 | ▇▂▁▁▁ |
| NUCLEAR | 0 | 1 | 6.992760e+03 | 9.645400e+02 | 3705.00 | 6.402000e+03 | 7.129000e+03 | 7.727000e+03 | 9.013000e+03 | ▁▂▆▇▃ |
| WIND | 0 | 1 | 4.953890e+03 | 3.542070e+03 | 0.00 | 2.115000e+03 | 4.199000e+03 | 6.925000e+03 | 1.712900e+04 | ▇▆▃▂▁ |
| HYDRO | 0 | 1 | 4.261700e+02 | 2.558900e+02 | 0.00 | 2.200000e+02 | 3.930000e+02 | 6.010000e+02 | 1.403000e+03 | ▇▇▅▂▁ |
| IMPORTS | 0 | 1 | 2.551950e+03 | 8.893800e+02 | 0.00 | 2.032000e+03 | 2.742000e+03 | 3.058000e+03 | 4.884000e+03 | ▁▃▇▇▁ |
| BIOMASS | 0 | 1 | 9.099500e+02 | 1.045210e+03 | 0.00 | 0.000000e+00 | 0.000000e+00 | 1.878000e+03 | 3.204000e+03 | ▇▁▂▂▁ |
| OTHER | 0 | 1 | 8.392600e+02 | 8.075300e+02 | 0.00 | 9.900000e+01 | 6.540000e+02 | 1.588000e+03 | 2.456000e+03 | ▇▁▂▁▃ |
| SOLAR | 0 | 1 | 1.208080e+03 | 1.904450e+03 | 0.00 | 0.000000e+00 | 1.100000e+01 | 1.910000e+03 | 9.680000e+03 | ▇▂▁▁▁ |
| STORAGE | 0 | 1 | 2.729600e+02 | 3.224400e+02 | 0.00 | 0.000000e+00 | 2.140000e+02 | 4.020000e+02 | 2.394000e+03 | ▇▂▁▁▁ |
| GENERATION | 0 | 1 | 3.383970e+04 | 7.040570e+03 | 18287.00 | 2.834800e+04 | 3.370600e+04 | 3.880325e+04 | 5.345400e+04 | ▃▇▇▅▁ |
| CARBON_INTENSITY | 0 | 1 | 2.730900e+02 | 9.291000e+01 | 54.00 | 2.080000e+02 | 2.600000e+02 | 3.360000e+02 | 5.800000e+02 | ▂▇▆▃▁ |
| LOW_CARBON | 0 | 1 | 1.449086e+04 | 4.063220e+03 | 6747.00 | 1.135600e+04 | 1.392200e+04 | 1.701400e+04 | 3.074600e+04 | ▅▇▅▁▁ |
| ZERO_CARBON | 0 | 1 | 1.358090e+04 | 3.695810e+03 | 5164.00 | 1.070500e+04 | 1.318600e+04 | 1.597400e+04 | 2.847300e+04 | ▃▇▅▂▁ |
| RENEWABLE | 0 | 1 | 6.588140e+03 | 3.906830e+03 | 125.00 | 3.534000e+03 | 6.022000e+03 | 8.954000e+03 | 2.311800e+04 | ▇▇▃▁▁ |
| FOSSIL | 0 | 1 | 1.568467e+04 | 6.761880e+03 | 2421.00 | 1.051575e+04 | 1.499500e+04 | 2.006400e+04 | 3.824200e+04 | ▅▇▆▂▁ |
| GAS_perc | 0 | 1 | 3.636000e+01 | 1.134000e+01 | 6.00 | 2.820000e+01 | 3.730000e+01 | 4.520000e+01 | 6.530000e+01 | ▂▅▇▇▁ |
| COAL_perc | 0 | 1 | 8.500000e+00 | 9.550000e+00 | 0.00 | 1.200000e+00 | 4.300000e+00 | 1.420000e+01 | 4.530000e+01 | ▇▂▂▁▁ |
| NUCLEAR_perc | 0 | 1 | 2.156000e+01 | 5.420000e+00 | 9.70 | 1.760000e+01 | 2.070000e+01 | 2.490000e+01 | 4.310000e+01 | ▂▇▅▁▁ |
| WIND_perc | 0 | 1 | 1.500000e+01 | 1.087000e+01 | 0.00 | 6.400000e+00 | 1.260000e+01 | 2.090000e+01 | 5.830000e+01 | ▇▆▂▁▁ |
| HYDRO_perc | 0 | 1 | 1.230000e+00 | 6.800000e-01 | 0.00 | 7.000000e-01 | 1.200000e+00 | 1.700000e+00 | 4.200000e+00 | ▆▇▅▁▁ |
| IMPORTS_perc | 0 | 1 | 7.900000e+00 | 3.140000e+00 | 0.00 | 5.900000e+00 | 8.100000e+00 | 1.010000e+01 | 1.890000e+01 | ▂▆▇▂▁ |
| BIOMASS_perc | 0 | 1 | 2.790000e+00 | 3.270000e+00 | 0.00 | 0.000000e+00 | 0.000000e+00 | 5.700000e+00 | 1.590000e+01 | ▇▃▂▁▁ |
| OTHER_perc | 0 | 1 | 2.560000e+00 | 2.520000e+00 | 0.00 | 3.000000e-01 | 1.800000e+00 | 4.700000e+00 | 1.050000e+01 | ▇▂▃▁▁ |
| SOLAR_perc | 0 | 1 | 3.370000e+00 | 5.430000e+00 | 0.00 | 0.000000e+00 | 0.000000e+00 | 5.100000e+00 | 3.180000e+01 | ▇▂▁▁▁ |
| STORAGE_perc | 0 | 1 | 7.200000e-01 | 8.300000e-01 | 0.00 | 0.000000e+00 | 6.000000e-01 | 1.100000e+00 | 7.900000e+00 | ▇▁▁▁▁ |
| GENERATION_perc | 0 | 1 | 1.000000e+02 | 0.000000e+00 | 100.00 | 1.000000e+02 | 1.000000e+02 | 1.000000e+02 | 1.000000e+02 | ▁▁▇▁▁ |
| LOW_CARBON_perc | 0 | 1 | 4.396000e+01 | 1.288000e+01 | 16.40 | 3.430000e+01 | 4.210000e+01 | 5.190000e+01 | 8.790000e+01 | ▃▇▅▂▁ |
| ZERO_CARBON_perc | 0 | 1 | 4.117000e+01 | 1.174000e+01 | 15.50 | 3.240000e+01 | 3.940000e+01 | 4.840000e+01 | 8.510000e+01 | ▂▇▅▂▁ |
| RENEWABLE_perc | 0 | 1 | 1.961000e+01 | 1.147000e+01 | 0.50 | 1.070000e+01 | 1.780000e+01 | 2.630000e+01 | 6.620000e+01 | ▇▇▃▁▁ |
| FOSSIL_perc | 0 | 1 | 4.487000e+01 | 1.271000e+01 | 9.00 | 3.630000e+01 | 4.600000e+01 | 5.420000e+01 | 7.670000e+01 | ▁▅▇▇▂ |
| year | 0 | 1 | 2.017220e+03 | 1.570000e+00 | 2015.00 | 2.016000e+03 | 2.017000e+03 | 2.019000e+03 | 2.020000e+03 | ▇▃▃▃▂ |
| nHalfHours | 0 | 1 | 4.800000e+01 | 0.000000e+00 | 48.00 | 4.800000e+01 | 4.800000e+01 | 4.800000e+01 | 4.800000e+01 | ▁▁▇▁▁ |
| totalC02e_g | 0 | 1 | 4.773949e+09 | 2.284019e+09 | 776697500.00 | 3.065711e+09 | 4.325845e+09 | 6.101636e+09 | 1.327839e+10 | ▆▇▃▂▁ |
| totalC02e_kg | 0 | 1 | 4.773949e+06 | 2.284019e+06 | 776697.50 | 3.065711e+06 | 4.325845e+06 | 6.101636e+06 | 1.327839e+07 | ▆▇▃▂▁ |
| month | 0 | 1 | 6.260000e+00 | 3.470000e+00 | 1.00 | 3.000000e+00 | 6.000000e+00 | 9.000000e+00 | 1.200000e+01 | ▇▆▅▅▇ |
| GW | 0 | 1 | 3.384000e+01 | 7.040000e+00 | 18.29 | 2.835000e+01 | 3.371000e+01 | 3.880000e+01 | 5.345000e+01 | ▃▇▇▅▁ |
| totalC02e_T | 0 | 1 | 4.773950e+03 | 2.284020e+03 | 776.70 | 3.065710e+03 | 4.325850e+03 | 6.101640e+03 | 1.327839e+04 | ▆▇▃▂▁ |
Variable type: POSIXct
| skim_variable | n_missing | complete_rate | min | max | median | n_unique |
|---|---|---|---|---|---|---|
| rDateTimeUTC | 0 | 1 | 2015-01-01 | 2020-05-27 23:30:00 | 2017-09-13 23:45:00 | 94464 |
| date | 0 | 1 | 2015-01-01 | 2020-05-27 23:30:00 | 2017-09-13 23:45:00 | 94464 |
| year | coal | gas | nuclear | wind | hydro | solar | biomass | imports | other | N obs |
|---|---|---|---|---|---|---|---|---|---|---|
| 2015 | 8501.77 | 9636.25 | 7502.69 | 3331.11 | 466.80 | 830.20 | 0.00 | 2656.93 | 1289.76 | 17472 |
| 2016 | 3195.47 | 14506.73 | 7605.16 | 3009.30 | 383.93 | 1179.91 | 0.00 | 2309.50 | 1615.29 | 17520 |
| 2017 | 2358.15 | 13615.49 | 7484.17 | 4620.53 | 450.90 | 1240.04 | 254.42 | 2222.41 | 1396.04 | 17472 |
| 2018 | 1756.72 | 13155.89 | 6921.38 | 5633.11 | 365.93 | 1343.86 | 1837.52 | 2515.88 | 81.57 | 17472 |
| 2019 | 679.18 | 13073.97 | 6023.42 | 6641.34 | 407.94 | 1340.81 | 1961.30 | 2868.01 | 88.55 | 17472 |
| 2020 | 862.89 | 9716.36 | 5569.73 | 8765.72 | 563.51 | 1469.71 | 2145.66 | 3016.74 | 153.30 | 7056 |
Figure ?? shows Theil-Sen plots for each fuel. Note that these are not de-seasoned so that the seasonal patterns can be seen. Theil-Sen trend lines are linear and so may go negative when a steep trends asymptotes to 0 (see e.g. coal). They also tend not to perform well when seasonal patterns are present.
## Loading required package: RColorBrewer
##
## Attaching package: 'latticeExtra'
## The following object is masked from 'package:ggplot2':
##
## layer
## [1] "Taking bootstrap samples. Please wait."
## [1] "Taking bootstrap samples. Please wait."
## [1] "Taking bootstrap samples. Please wait."
## [1] "Taking bootstrap samples. Please wait."
## [1] "Taking bootstrap samples. Please wait."
## [1] "Taking bootstrap samples. Please wait."
## [1] "Taking bootstrap samples. Please wait."
## [1] "Taking bootstrap samples. Please wait."
## [1] "Taking bootstrap samples. Please wait."
## [1] "Taking bootstrap samples. Please wait."
Figure 6.1 shows the relationship between half-hourly carbon intensity and half-hourly generation over the last five years. 2020 is excluded as it is not yet complete.
##
## Attaching package: 'gtools'
## The following object is masked from 'package:drake':
##
## running
Figure 6.1: Box & whiskers plots of carbon intensity over time by generation decile
The openair package (Carslaw and Ropkins 2012) contains a number of novel plotting methods.
## Warning: `as_data_frame()` is deprecated as of tibble 2.0.0.
## Please use `as_tibble()` instead.
## The signature and semantics have changed, see `?as_tibble`.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_warnings()` to see where this warning was generated.
## Warning: `data_frame()` is deprecated as of tibble 1.1.0.
## Please use `tibble()` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_warnings()` to see where this warning was generated.
Analysis completed in 95.58 seconds ( 1.59 minutes) using knitr in RStudio with R version 3.6.0 (2019-04-26) running on x86_64-redhat-linux-gnu.
## R version 3.6.0 (2019-04-26)
## Platform: x86_64-redhat-linux-gnu (64-bit)
## Running under: Red Hat Enterprise Linux
##
## Matrix products: default
## BLAS/LAPACK: /usr/lib64/R/lib/libRblas.so
##
## locale:
## [1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8
## [5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8 LC_PAPER=en_GB.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] gtools_3.8.1 latticeExtra_0.6-28 RColorBrewer_1.1-2 lattice_0.20-38 openair_2.7-2
## [6] kableExtra_1.1.0 zoo_1.8-4 skimr_2.1.1 lubridate_1.7.8 hms_0.5.3
## [11] ggplot2_3.3.0 drake_7.12.1 data.table_1.12.0 gridCarbon_0.1.0 here_0.1
##
## loaded via a namespace (and not attached):
## [1] Rcpp_1.0.1 txtq_0.2.0 tidyr_1.0.3 prettyunits_1.0.2 assertthat_0.2.0 rprojroot_1.3-2
## [7] digest_0.6.25 utf8_1.1.4 R6_2.3.0 repr_1.1.0 backports_1.1.3 evaluate_0.14
## [13] highr_0.7 httr_1.4.1 pillar_1.4.4 rlang_0.4.6 progress_1.2.2 rstudioapi_0.11
## [19] hexbin_1.27.2 Matrix_1.2-17 rmarkdown_2.1 labeling_0.3 splines_3.6.0 webshot_0.5.2
## [25] readr_1.3.1 stringr_1.4.0 igraph_1.2.2 munsell_0.5.0 compiler_3.6.0 xfun_0.13
## [31] pkgconfig_2.0.2 base64enc_0.1-3 mgcv_1.8-28 htmltools_0.3.6 tidyselect_0.2.5 tibble_3.0.1
## [37] bookdown_0.19 fansi_0.4.0 viridisLite_0.3.0 crayon_1.3.4 dplyr_0.8.5 withr_2.1.2
## [43] MASS_7.3-51.4 grid_3.6.0 nlme_3.1-139 jsonlite_1.6 gtable_0.2.0 lifecycle_0.2.0
## [49] magrittr_1.5 storr_1.2.1 scales_1.0.0 cli_2.0.2 stringi_1.2.4 mapproj_1.2.7
## [55] xml2_1.3.2 ellipsis_0.3.1 filelock_1.0.2 generics_0.0.2 vctrs_0.3.0 tools_3.6.0
## [61] forcats_0.5.0 glue_1.3.0 purrr_0.3.4 maps_3.3.0 parallel_3.6.0 yaml_2.2.0
## [67] colorspace_1.4-0 cluster_2.0.8 base64url_1.4 rvest_0.3.5 knitr_1.28
Allaire, JJ, Yihui Xie, Jonathan McPherson, Javier Luraschi, Kevin Ushey, Aron Atkins, Hadley Wickham, Joe Cheng, and Winston Chang. 2018. Rmarkdown: Dynamic Documents for R. https://CRAN.R-project.org/package=rmarkdown.
Carslaw, David C., and Karl Ropkins. 2012. “Openair — an R Package for Air Quality Data Analysis.” Environmental Modelling & Software 27–28 (0): 52–61. doi:10.1016/j.envsoft.2011.09.008.
Dowle, M, A Srinivasan, T Short, S Lianoglou with contributions from R Saporta, and E Antonyan. 2015. Data.table: Extension of Data.frame. https://CRAN.R-project.org/package=data.table.
Grolemund, Garrett, and Hadley Wickham. 2011. “Dates and Times Made Easy with lubridate.” Journal of Statistical Software 40 (3): 1–25. http://www.jstatsoft.org/v40/i03/.
Khan, Imran, Michael W. Jack, and Janet Stephenson. 2018. “Analysis of Greenhouse Gas Emissions in Electricity Systems Using Time-Varying Carbon Intensity.” Journal of Cleaner Production 184 (May): 1091–1101. doi:10.1016/j.jclepro.2018.02.309.
Landau, William Michael. 2019. Drake: A Pipeline Toolkit for Reproducible Computation at Scale. https://CRAN.R-project.org/package=drake.
R Core Team. 2016. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.
Staffell, Iain. 2017. “Measuring the Progress and Impacts of Decarbonising British Electricity.” Energy Policy 102 (March): 463–75. doi:10.1016/j.enpol.2016.12.037.
Wickham, Hadley. 2009. Ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York. http://ggplot2.org.
Xie, Yihui. 2016a. Bookdown: Authoring Books and Technical Documents with R Markdown. Boca Raton, Florida: Chapman; Hall/CRC. https://github.com/rstudio/bookdown.
———. 2016b. Knitr: A General-Purpose Package for Dynamic Report Generation in R. https://CRAN.R-project.org/package=knitr.
Zeileis, Achim, and Gabor Grothendieck. 2005. “Zoo: S3 Infrastructure for Regular and Irregular Time Series.” Journal of Statistical Software 14 (6): 1–27. doi:10.18637/jss.v014.i06.
Zhu, Hao. 2018. KableExtra: Construct Complex Table with ’Kable’ and Pipe Syntax. https://CRAN.R-project.org/package=kableExtra.